home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 5
/
Aminet 5 - March 1995.iso
/
Aminet
/
util
/
boot
/
xinstall.lha
/
xInstall
/
xInstall14.asm
< prev
next >
Wrap
Assembly Source File
|
1992-09-02
|
59KB
|
2,780 lines
******************************************************
* XInstall v1.4 *
* copyright © 1994 by Jens Tröger *
* all rights reserved *
******************************************************
* take NO care for my english - it`s terrible *
******************************************************
* Revision History: *
* o first there was this idea... *
* o ...some simple tests and reading books... *
* o v1.0 was born (oh what a hard work !!!!) *
* but -#?§$/&- it doesn`t work without trouble *
* o v1.1 is the actually version (bugs ?? hope *
* U will find nothing, but if so, don`t cry & *
* let me know !) *
* o v1.2 goes WB *
* o v1.2a: i modified the GTB-source (now faster *
* and no bugs -I hope-) [sorry, Jan], removed *
* the terrible flicker at startup *
* o v1.3 all error-messages are localized *
* o v1.3a the localization failed (don`t know *
* why !), but one bug killed, the string-gad *
* goes colored when activated *
* o v1.3b still working on localization, some *
* code optimized *
* o v1.3c now localized (thanks Oliver !!) and *
* no trouble anymore (ON MY MACHINE) *
* o v1.3d new workbench-startup, code more *
* optimized *
* o v1.4 GUI a little bit changed. Show and Read *
* added. Does not calc CheckSum when BB Empty *
* is on. *
* o v1.4a trouble with big proportional-fonts on *
* high resolution removed *
******************************************************
* Assembler: DevPac v2.14d (tab 11) *
* DevPac v3.04
* Books: AMIGA intern, AMIGA Profi Know How, *
* RKRM Libraries 3rd Ed. *
* Help: Holger Gzella (Scroller BB) *
* Jan van den Baard (BackFill-Pattern) *
* !!! THANX A LOT !!! *
* Tester: "PackMAN" Falk Zühlsdorff (27 n.D.) *
* he`s the best Pas-Coder I know !!! *
* Big Thanx: Jan van den Bard for GadToolsBox *
* (I created the Layout...) *
* Thanx too: all, I know *
* ...and: Merci to Helloween for music (Great) *
* my girl Claudia for beeing there *
******************************************************
* Bug-Reports, Suggestion, Money, ... to *
* *
* Jens Tröger *
* Jahnstr. 5 *
* 08209 Auerbach/V *
* GERMANY *
* *
******************************************************
opt o+
dummy_tag equ $80000000
rt_window equ (dummy_tag+01)
rt_reqpos equ (dummy_tag+03)
rt_lockwindow equ (dummy_tag+13)
rt_screentofront equ (dummy_tag+14)
rt_underscore equ (dummy_tag+11)
rtez_reqtitle equ (dummy_tag+20)
rtez_flags equ (dummy_tag+22)
rtfi_flags equ (dummy_tag+40)
rtgs_allowempty equ (dummy_tag+80)
rtgs_textfmt equ (dummy_tag+38)
gtst_string equ (dummy_tag+$8002d)
gtcy_active equ (dummy_tag+$8000f)
loclea MACRO ; important for localized xInstall
pea.l \1 ; thanx to ALEXANDER KOCHMANN
opt w- ; and OLIVER REIFF
bsr get_string
opt w+
move.l (sp)+,\2
ENDM
SECTION "xInstall_CODE",CODE
; ----- first save command-line (if cli-start)
; ----- later it will be ignored...
movem.l d0/a0,-(sp) ; length (d0) and adress (a0)
; of command-line
; ----- Where did we start from ? CLI or WB...
moveq #0,d7
move.l 4.w,a6
sub.l a1,a1 ; own task
jsr -294(a6) ; _LVOFindTask
move.l d0,a0
move.l d0,thistask
tst.l 172(a0) ; pr_CLI (APTR to CLI-Struc)
bne.s from_cli
from_wb lea.l 92(a0),a0 ; pr_MsgPort
jsr -384(a6) ; _LVOWaitPort
jsr -372(a6) ; _LVOGetMsg
move.l d0,wbenchmsg
from_cli movem.l (sp)+,d0/a0
bsr.s go_do_it
tst.l wbenchmsg
beq.s exit
move.l 4.w,a6
jsr -132(a6) ; _LVOForbid
move.l d7,a1
jsr -378(a6) ; _LVOReplyMsg
exit moveq #0,d0
rts
******************************************************
* XInstall v1.4 *
* this goes, when started from Workbench *
******************************************************
go_do_it
; ----- check the Kick-Version: I need 2.0 or higher to run !!
move.l 4.w,a6 ; need Kick 2.0 or higher
cmp.w #37,$14(a6) ; exec_SoftVer
blt no_kick20
move.l #0,locbase ; clear these pointers
move.l #0,catalog
; ----- open locale.library and xinstall.catalog to use localized strings
open_loc move.l 4.w,a6
lea.l loc_name,a1
moveq #37,d0
jsr -552(a6) ; _LVOOpenLibrary
move.l d0,locbase
beq.s init_tderr
move.l d0,a6
move.l #0,a0
lea.l cat_name,a1
move.l #0,a2
jsr -150(a6) ; _LVOOpenCatalogA
move.l d0,catalog
; ----- now fill the td_errtab with pointers to the error-strings
init_tderr lea.l td_errtab,a5
loclea err_txt1,(a5)+
loclea err_txt2,(a5)+
loclea err_txt3,(a5)+
loclea err_txt4,(a5)+
loclea err_txt5,(a5)+
loclea err_txt6,(a5)+
loclea err_txt7,(a5)+
loclea err_txt8,(a5)+
loclea err_txt9,(a5)+
loclea err_txt10,(a5)+
loclea err_txt11,(a5)+
loclea err_txt12,(a5)+
loclea err_txt13,(a5)+
loclea err_txt14,(a5)+
loclea err_txt15,(a5)+
loclea err_txt16,(a5)+
loclea err_txt17,(a5)+
; ----- this will setup the localized gadgets (no more full
; ----- key-selection available... sorry)
loclea gadget6txt,gad6_text
loclea gadget7txt,gad7_text
loclea gadget8txt,gad8_text
loclea gadget9txt,gad9_text
loclea bb1_text,gad0_lab
loclea bb2_text,gad0_lab+4
loclea bb3_text,gad0_lab+8
loclea bb4_text,gad0_lab+12
loclea bb5_text,gad0_lab+16
loclea bb6_text,gad0_lab+20
loclea fmt_text,scrl_tags+60
; ----- now find the underscored letter of gadget`s text and use it
find_under loclea gadget6txt,a0
.loop_1 cmp.b #"_",(a0)+
beq.s .found_1
cmp.b #0,(a0)
beq.s .search_2
bra.s .loop_1
.found_1 move.b (a0),d0
move.b d0,read_key1
cmp.b #"a",d0
blt.s .big_1
sub.b #$20,d0
move.b d0,read_key2
bra.s .search_2
.big_1 add.b #$20,d0
move.b d0,read_key2
.search_2 loclea gadget7txt,a0
.loop_2 cmp.b #"_",(a0)+
beq.s .found_2
cmp.b #0,(a0)
beq.s .search_3
bra.s .loop_2
.found_2 move.b (a0),d0
move.b d0,load_key1
cmp.b #"a",d0
blt.s .big_2
sub.b #$20,d0
move.b d0,load_key2
bra.s .search_3
.big_2 add.b #$20,d0
move.b d0,load_key2
.search_3 loclea gadget8txt,a0
.loop_3 cmp.b #"_",(a0)+
beq.s .found_3
cmp.b #0,(a0)
beq.s .search_4
bra.s .loop_3
.found_3 move.b (a0),d0
move.b d0,show_key1
cmp.b #"a",d0
blt.s .big_3
sub.b #$20,d0
move.b d0,show_key2
bra.s .search_4
.big_3 add.b #$20,d0
move.b d0,show_key2
.search_4 loclea gadget9txt,a0
.loop_4 cmp.b #"_",(a0)+
beq.s .found_4
cmp.b #0,(a0)
beq.s .done
bra.s .loop_4
.found_4 move.b (a0),d0
move.b d0,about_key1
cmp.b #"a",d0
blt.s .big_4
sub.b #$20,d0
move.b d0,about_key2
bra.s .done
.big_4 add.b #$20,d0
move.b d0,about_key2
.done
; ----- if started from CLI printout funny message (ha ha ha !!)
tst.l wbenchmsg
bne.s open_rt
funny_out1 lea.l dos_name,a1
moveq #37,d0
move.l 4.w,a6
jsr -552(a6) ; _LVOOpenLibrary
cmp.l #0,d0
beq.s open_rt
move.l d0,a6
jsr -60(a6) ; _LVOOutput
move.l d0,d1
loclea funny_msg1,a0
move.l a0,d2
moveq #0,d3
.count_chr cmp.b #0,(a0)+
beq.s .out
addq #1,d3
bra.s .count_chr
.out jsr -48(a6) ; _LVOWrite
move.l a6,a1
move.l 4.w,a6
jsr -414(a6) ; _LVOCloseLibrary
; ----- open reqtools.library *** brilliant, Nico François **
open_rt move.l 4.w,a6
lea.l req_name,a1 ; open reqtools.library
moveq #38,d0
jsr -552(a6) ; _LVOOpenLibrary
move.l d0,reqbase
beq no_reqlib ; open failed -> end
; ----- reqtoolsbase holds some "Needful things" (!!!)
move.l d0,a0
move.l $2a(a0),intbase ; rt_IntuitionBase
move.l $2e(a0),gfxbase ; rt_GfxBase
move.l $32(a0),dosbase ; rt_DOSBase
move.l $36(a0),gadbase ; rt_GadToolsBase
; ----- alloc memory for BB
move.l #1024,d0 ; 1024 Bytes
move.l #$10002,d1 ; MEMF_CHIP|MEMF_CLEAR
move.l 4.w,a6
jsr -198(a6) ; _LVOAllocMem
move.l d0,bb_mem
beq close_req ; oh f... - no mem ???
; ----- now open window (thanx to Jan van den Baard)
; ----- sorry, but I did big work on your code to make
; ----- it better (you know the bug !) and to add the
; ----- pattern (thanx again) to the window
open_scr bsr setup_scr
cmp.l #0,d0
beq.s open_wnd
bra scr_failed
open_wnd bsr setup_wnd
cmp.l #0,d0
beq.s add_port
bra wnd_failed
; ----- add a port for device-operation
add_port move.l thistask,replyport+16
lea.l replyport,a1
move.l 4.w,a6
jsr -354(a6) ; _LVOAddPort
; ----- check for disk-drives
; ----- you can also FindTask() named "DF0", "DF1" etc, but I
; ----- try to open the trackdisk.device
check_drvs move.l gad_list,a3 ; disable Drive-Gads if not
moveq #2,d0 ; mounted
.loop move.l (a3),a3
dbra d0,.loop ; find Button DF0 (5th at GGList)
moveq #0,d3
.td_loop bsr.s .check_dev ; loop 2 find out, which
move.l (a3),a3 ; drive is on
addq.l #1,d3
cmp.l #3,d3
ble.s .td_loop
bra.s disable_gg
.check_dev lea.l track_name,a0 ; if OpenDevice fails, the
lea.l disk_io,a1 ; drive is not on
move.l d3,d0
moveq #0,d1
move.l 4.w,a6
jsr -444(a6) ; _LVOOpenDevice
cmp.l #0,d0
beq.s .device_on
move.l a3,a0
move.l window,a1
move.l #0,a2
move.l intbase,a6
jmp -174(a6) ; _LVOOffGadget
.device_on lea.l disk_io,a1
jmp -450(a6) ; _LVOCloseDevice
; ------ disable the FileSelect- and Read-Gadgets
disable_gg lea dis_tab,a1
moveq #1,d2
.loop2 move.l (a1)+,d0
move.l gad_list,a0
.loop1 move.l (a0),a0
dbra d0,.loop1
move.l a0,getfile_1
movem.l a1,-(sp)
move.l window,a1
move.l #0,a2
move.l intbase,a6
jsr -174(a6) ; _LVOOffGadget
movem.l (sp)+,a1
dbra d2,.loop2
; ----- write window-ptr to requester-tags and process-structure
move.l window,about_tags+4 ; WindowPtr 4 rtRequesters
move.l window,freq_tags+4
move.l window,scrl_tags+4
move.l thistask,a0
move.l window,$b8(a0) ; pr_WindowPtr
; ----- wait for message
get_msg move.l 4.w,a6
move.l window,a0 ; wait 4 IDCMP-Message
move.l $56(a0),a0 ; wd_UserPort --> a0
move.l a0,a2
jsr -384(a6) ; _LVOWaitPort
move.l a2,a0
move.l gadbase,a6
jsr -72(a6) ; _LVOGT_GetIMsg
move.l d0,a1
move.l $14(a1),d0 ; im_Class d0
move.w $18(a1),d1 ; im_Code d1
move.l $1c(a1),d2 ; im_IAdress d2
movem.l d0-d2,-(sp)
jsr -78(a6) ; _LVOGT_ReplyIMsg
movem.l (sp)+,d0-d2
cmpi.l #$40,d0 ; IDCMP_GadgetDown
beq.s gad_up
cmpi.l #$200000,d0 ; IDCMP_VanillaKey
beq.s keypressed
cmpi.l #$200,d0 ; IDCMP_CloseWindow
beq.s quit
bra.s get_msg
; ----- jump to subroutines
gad_up moveq #0,d0 ; compute the adress to jump to
move.l d2,a0
move.w $26(a0),d0
lsl.l #2,d0
lea.l jmp_tab1,a0 ; see the table below
adda.l d0,a0
move.l (a0),a0
jmp (a0)
keypressed lea.l jmp_tab2,a0 ; see table jmp_tab2
.key_loop move.b (a0),d4
cmp.b d1,d4
beq.s .key_jump
cmp.b #0,d4
beq.s get_msg
lea.l 6(a0),a0
bra.s .key_loop
.key_jump lea.l 2(a0),a0
move.l (a0),a0
jmp (a0)
; ----- close window (press q to quit too)
quit bsr close_wnd
bsr close_scr
; ----- remove the port
rem_port lea.l replyport,a1
move.l 4.w,a6
jsr -360(a6) ; _LVORemPort
; ----- free allocated memory
free_mem move.l bb_mem,a1
move.l #1024,d0
move.l 4.w,a6
jsr -210(a6) ; _LVOFreeMemory
; ----- close reqtools.library
close_req move.l reqbase,a1
move.l 4.w,a6
jsr -414(a6) ; _LVOCloseLibrary
; ----- close locale.library
no_reqlib cmp.l #0,catalog
beq.s .close_loc
move.l catalog,a0
move.l locbase,a6
jsr -36(a6) ; _LVOCloseCatalog
.close_loc cmp.l #0,locbase
beq.s funny_out2
move.l locbase,a1
move.l 4.w,a6
jsr -414(a6) ; _LVOCloseLibrary
; ----- complete the very funny message
funny_out2 tst.l wbenchmsg
bne.s go_away
funny_out lea.l dos_name,a1
moveq #37,d0
move.l 4.w,a6
jsr -552(a6) ; _LVOOpenLibrary
cmp.l #0,d0
beq.s go_away
move.l d0,a6
jsr -60(a6) ; _LVOOutput
move.l d0,d1
loclea funny_msg2,a0
move.l a0,d2
moveq #0,d3
.count_chr cmp.b #0,(a0)+
beq.s .out
addq #1,d3
bra.s .count_chr
.out jsr -48(a6) ; _LVOWrite
move.l a6,a1
move.l 4.w,a6
jsr -414(a6) ; _LVOCloseLibrary
; ----- NOW quit away...
go_away moveq #0,d0
rts
; ----- cry for help
scr_failed
wnd_failed move.l reqbase,a1
move.l 4.w,a6
jsr -414(a6) ; _LVOCloseLibrary
move.l locbase,a1
move.l 4.w,a6
jsr -414(a6) ; _LVOCloseLibrary
no_kick20 moveq #20,d0 ; no Kick
rts
; ----- CycleGad "Bootblock" selected...
bootblock1 move.b d1,bb_id ; ...by MousePtr
bra.s bb_goon
bootblock2 cmp.b #"B",d1 ; ...by Keyboard
beq.s .down
.up addq.b #1,bb_id ; add (key "b") or sub
cmp.b #5,bb_id ; (key "B") the CycleEntry
ble.s .refresh ; and refresh the Gadget
move.b #0,bb_id
bra.s .refresh
.down subq.b #1,bb_id
cmp.b #0,bb_id
bge.s .refresh
move.b #5,bb_id
.refresh lea.l gtcy_act,a3
move.b bb_id,7(a3)
move.l gad_list,a0
move.l (a0),a0
move.l window,a1
move.l #0,a2
move.l gadbase,a6
jsr -42(a6) ; _LVOGT_SetGadgetAttrsA
bb_goon cmp.b #5,bb_id ; enable Path if BB "(File)"
beq.s .en_path
.dis_path move.l getfile_1,a0
move.w $0c(a0),d0
btst #8,d0 ; DISABLED-Bit already set ?
bne get_msg ; yoop -> don`t disable gadget
lea dis_tab,a1
moveq #1,d2
.loop2 move.l (a1)+,d0
move.l gad_list,a0
.loop1 move.l (a0),a0
dbra d0,.loop1
move.l a0,getfile_1
movem.l a1,-(sp)
move.l window,a1
move.l #0,a2
move.l intbase,a6
jsr -174(a6) ; _LVOOffGadget
movem.l (sp)+,a1
dbra d2,.loop2
bra get_msg
.en_path lea dis_tab,a1
moveq #1,d2
.loop4 move.l (a1)+,d0
move.l gad_list,a0
.loop3 move.l (a0),a0
dbra d0,.loop3
move.l a0,getfile_1
movem.l a1,-(sp)
move.l window,a1
move.l #0,a2
move.l intbase,a6
jsr -186(a6) ; _LVOOnGadget
movem.l (sp)+,a1
dbra d2,.loop4
bra get_msg
; ----- CycleGad "FileSystem" selected...
filesys1 move.b d1,fs_id ; ... MousePtr
bra get_msg
filesys2 cmp.b #"F",d1 ; ... Keyboard
beq.s .down ; same like bootblock2
.up addq.b #1,fs_id ; (see above)
cmp.b #5,fs_id
ble.s .refresh
move.b #0,fs_id
bra.s .refresh
.down subq.b #1,fs_id
cmp.b #0,fs_id
bge.s .refresh
move.b #5,fs_id
.refresh lea.l gtcy_act,a3
move.b fs_id,7(a3)
move.l gad_list,a0
move.l (a0),a0
move.l (a0),a0
move.l window,a1
move.l #0,a2
move.l gadbase,a6
jsr -42(a6) ; _LVOGT_SetGadgetAttrsA
bra get_msg
; ----- About-Requester
about lea.l about_tags,a0 ; only a simple About-Req
loclea about_text,a1
lea.l about_gad,a2
bsr do_req
bra get_msg
; ----- any Drive-Button was pressed...
df0 moveq #2,d0 ; ignore key if button...
bsr.s get_ggptr ; ...is disabled
move.w $0c(a0),d0
btst #8,d0 ; gg_Flags -> DISABLED
bne get_msg
moveq #0,d5
bra.s inst_goon
df1 moveq #3,d0
bsr.s get_ggptr
move.w $0c(a0),d0
btst #8,d0 ; gg_Flags -> DISABLED
bne get_msg
moveq #1,d5
bra.s inst_goon
df2 moveq #4,d0
bsr.s get_ggptr
move.w $0c(a0),d0
btst #8,d0 ; gg_Flags -> DISABLED
bne get_msg
moveq #2,d5
bra.s inst_goon
df3 moveq #5,d0
bsr.s get_ggptr
move.w $0c(a0),d0
btst #8,d0 ; gg_Flags -> DISABLED
bne get_msg
moveq #3,d5
inst_goon cmp.b #3,bb_id
beq scroll_bb
bra do_install
get_ggptr move.l gad_list,a0 ; get ptr to Gadget (a0) with
.loop move.l (a0),a0 ; ID -> d0
move.w $26(a0),d1 ; gg_GadgetID
cmp.w d0,d1
bne.s .loop
rts
; ----- get the Path of the BB-File to load
load move.l getfile_1,a0 ; if Gadget disabled -> ignore
move.w $0c(a0),d0
btst #8,d0 ; gg_Flags -> DISABLED
bne get_msg
move.l bb_mem,a0
move.l #1023,d0
.loop1 move.b #0,(a0)+
dbra d0,.loop1
move.l reqbase,a6 ; get the Name & Path
moveq #0,d0
move.l d0,a0
jsr -30(a6) ; _LVOrtAllocRequestA
cmp.l #0,d0
beq get_msg
lea.l freq_tags,a0
move.l d0,a1
move.l d0,d7
lea.l freq_array,a2
loclea freq_title,a3
jsr -54(a6) ; _LVOrtFileRequestA
cmp.l #0,d0
bne.s .copy_path
move.l d7,a1
jsr -36(a6) ; _LVOrtFreeRequestA
bra get_msg
.copy_path lea.l bb_path,a0 ; make complete Path
move.l a0,a1
move.l #255,d0
.clr_loop move.b #0,(a1)+
dbra d0,.clr_loop
move.l d7,a1
move.l $10(a1),a1
.copy_loop cmp.b #0,(a1)
beq.s .copy_file
move.b (a1)+,(a0)+
bra.s .copy_loop
.copy_file cmp.b #":",-(a0)
beq.s .file2path
lea.l 1(a0),a0
move.b #"/",(a0)
.file2path lea.l 1(a0),a0
lea.l freq_array,a1
.copyloop2 cmp.b #0,(a1)
beq.s .path_done
move.b (a1)+,(a0)+
bra.s .copyloop2
.path_done move.l getfile_1,a0 ; show Path in StringGad
move.l window,a1
move.l #0,a2
lea.l stringtags,a3
lea.l bb_path,a4
move.l a4,4(a3)
move.l gadbase,a6
jsr -42(a6) ; _LVOSetGadgetAttrA
move.l reqbase,a6
move.l d7,a1
jsr -36(a6) ; _LVOrtFreeRequestA
.load2bfr move.l dosbase,a6
move.l #bb_path,d1
moveq #-2,d2
jsr -84(a6) ; _LVOLock
tst.l d0
bne.s .go_exam
bra .cant_lock ; no lock - no file
.go_exam move.l d0,d5
move.l d0,d1
move.l #examine_bf,d2
jsr -102(a6) ; _LVOExamine
move.l d5,d1
jsr -90(a6) ; _LVOUnLock
lea.l examine_bf,a0
move.l 124(a0),d6
cmp.l #1024,d6 ; FileSize greater than 1024 Bytes ?
bgt.s .not_a_bb ; yes --> no (Disk)-BB
move.l #bb_path,d1 ; open File 4 reading...
move.l #1005,d2
jsr -30(a6) ; _LVOOpen
move.l d0,d7
cmp.l #0,d0
bne.s .read_it
bra .cant_open
.read_it move.l d0,d1
move.l bb_mem,d2
move.l d6,d3
jsr -42(a6) ; _LVORead
cmp.l d6,d0
bne .read_err
.read_goon move.l d7,d1 ; ...and close File
jsr -36(a6) ; _LVOClose
move.l bb_mem,a0 ; is loaded file a BB ?
move.l (a0),d0
move.l d0,d1
and.l #$ffffff00,d0
cmp.l #$444f5300,d0 ; 1st Long "DOS",0 ?
beq.s .lf_done
cmp.l #"KICK",d1 ; 1st Long "KICK" ?
bne.s .not_a_bb
.lf_done bra do_install
.not_a_bb lea.l about_tags,a0 ; ERROR: File no BB
loclea err3_text,a1
loclea err1_gad,a2
bsr do_req
bra.s .clr_bfr
.cant_lock lea.l about_tags,a0 ; ERROR: no lock
loclea err1_text,a1
loclea err1_gad,a2
bsr do_req
bra.s .clr_bfr
.cant_open lea.l about_tags,a0 ; ERROR: can`t open
loclea err2_text,a1
loclea err1_gad,a2
bsr do_req
bra.s .clr_bfr
.read_err lea.l about_tags,a0 ; ERROR: can`t read
loclea err4_text,a1
loclea err1_gad,a2
bsr do_req
.clr_bfr move.l bb_mem,a0
move.l #1023,d0
.loop move.b #0,(a0)+
dbra d0,.loop
bra get_msg
; ----- Scroller-BB needs a special Routine
scroll_bb move.l reqbase,a6 ; get Scroll-Text
moveq #5,d0
move.l #0,a0
jsr -30(a6) ; _LVOrtAllocRequestA
cmp.l #0,d0
beq get_msg
move.l d0,d7
moveq #49,d0
lea.l scrl_tags,a0
lea.l scrl_bufr,a1
lea.l reqtitle,a2
move.l d7,a3
jsr -72(a6) ; _LVOrtGetStringA
.free_req move.l d0,d6
move.l d7,a1
jsr -36(a6) ; _LVOrtFreeRequestA
cmp.l #0,d6
beq get_msg
move.l bb_mem,a0 ; copy BB to BBBuffer
lea.l scroller,a1
move.l #scroller_end-scroller-1,d0
.copy_loop move.b (a1)+,(a0)+
dbra d0,.copy_loop
; ----- Install-Routine (will react to errors !)
; in: d5 - drive
; out: -
do_install movem.l d0-d7/a0-a6,-(sp)
move.w #3,dev_cmd
cmp.b #3,bb_id
beq.s .goon1
cmp.b #5,bb_id
beq.s .goon1
bsr copy2bfr
.goon1 move.l bb_mem,a0
move.b fs_id,3(a0) ; don`t forget the FileSystem
bsr calc_csm ; and the CheckSum
move.l show_gg,a0
move.w $0c(a0),d0
btst #7,d0
beq.s do_device
bsr show_bb
tst.l d0
bne.s do_device
move.l bb_mem,a0
move.l #255,d0
.bfr_clr move.l #0,(a0)+ ; after writing clear the
dbra d0,.bfr_clr ; buffer
.return movem.l (sp)+,d0-d7/a0-a6
bra get_msg
; ----- read/write bb from/to disk (read always unit 0)
do_device lea.l disk_io,a1
move.l #replyport,14(a1)
move.l d5,d0
moveq #0,d1
lea.l track_name,a0
move.l 4.w,a6
jsr -444(a6) ; _LVOOpenDevice
cmp.l #0,d0
bne .no_device
lea.l disk_io,a1
move.w dev_cmd,28(a1) ; CMD_WRITE
move.l bb_mem,40(a1) ; write what ?
move.l #1024,36(a1) ; write 1024 Bytes
move.l #0,44(a1) ; start writing block 0
jsr -456(a6) ; _LVODoIO
cmp.l #0,d0
bne.s .io_failed ; ooops - an error
move.w #4,28(a1) ; CMD_UPDATE (don`t forget !!)
jsr -456(a6) ; _LVODoIO
cmp.l #0,d0
bne.s .io_failed ; ooops - another error
move.w #9,28(a1) ; CMD_MOTOR
move.l #0,36(a1)
jsr -456(a6) ; _LVODoIO
cmp.l #0,d0
bne.s .io_failed ; ooops - f... !!!
lea.l disk_io,a1
jsr -450(a6) ; _LVOCloseDevice
cmp.w #2,dev_cmd
beq.s .return
.done move.l bb_mem,a0
move.l #255,d0
.bfr_clr move.l #0,(a0)+ ; after writing clear the
dbra d0,.bfr_clr ; buffer
.return movem.l (sp)+,d0-d7/a0-a6
bra get_msg
.no_bb loclea err_txt4,a1 ; react to the errors
bra.s .error_out
.no_device lea.l err_txt1,a1
bra.s .error_out
.io_failed move.l d0,d7
move.w #9,28(a1) ; first CMD_MOTOR
move.l #0,36(a1)
jsr -456(a6) ; _LVODoIO
move.l d7,d0
sub.l #19,d0
lsl.l #2,d0
lea.l td_errtab,a1 ; see the tab below
adda.l d0,a1
move.l (a1),a1
.error_out lea.l about_tags,a0
lea.l about_gad,a2
bsr do_req
movem.l (sp)+,d0-d7/a0-a6
bra get_msg
; ----- this will copy the boot-code to the install-buffer, if not
; ----- selected "Scroller" or "(File)"
copy2bfr movem.l a0/a1/d0,-(sp)
move.l bb_mem,a0 ; first clear the buffer
move.l #1023,d0
.clr_loop move.b #0,(a0)+
dbra d0,.clr_loop
moveq #0,d0
move.b bb_id,d0 ; calc adress and length of
lsl.l #3,d0 ; Bootblock to copy (see table
lea.l bb_table,a0 ; bb_table !)
adda.l d0,a0
move.l a0,a1
lea.l 4(a1),a1
move.l (a0),a0
move.l (a1),a1
suba.l a0,a1
move.l a1,d0
subq #1,d0
move.l bb_mem,a1
.loop1 move.b (a0)+,(a1)+ ; copy to buffer...
dbra d0,.loop1
movem.l (sp)+,a0/a1/d0
rts
; ----- compute Check-Sum of BB
calc_csm movem.l a1/d0/d1,-(sp) ; this way you calc BB`s CSum
cmp.b #0,bb_id
beq.s .all_done
move.l bb_mem,a1
move.w #$ff,d0
moveq #0,d1
move.l #0,4(a1)
.add_loop add.l (a1)+,d1
bcc.s .no_carry
addq.l #1,d1
.no_carry dbra d0,.add_loop
not.l d1
bcc.s .calc_done
addq.l #1,d1
.calc_done move.l bb_mem,a1
move.l d1,4(a1)
.all_done movem.l (sp)+,a1/d0/d1
rts
; ----- setup rt_Requester
; IN A0 ^TagList
; A1 ^BodyText
; A2 ^GadgetText
; OUT D0 Nr. of Gadgets/-1($ff) if failed
do_req movem.l d1-d7/a0-a6,-(sp)
move.l reqbase,a6
moveq #5,d0
move.l #0,a0
jsr -30(a6) ; _LVOrtAllocRequestA
cmp.l #0,d0
beq.s .failed
move.l d0,d7
movem.l 28(sp),a0-a2
move.l d7,a3
move.l #0,a4
jsr -66(a6) ; _LVOrtEZRequestA
move.l d0,d6
move.l d7,a1
jsr -36(a6) ; _LVOrtFreeRequestA
move.l d6,d0
movem.l (sp)+,d1-d7/a0-a6
rts
.failed movem.l (sp)+,d1-d7/a0-a6
moveq #-1,d0
rts
; ----- this will toggle the show-gadget
show move.l window,a0
move.l show_gg,a1
move.l intbase,a6
jsr -228(a6) ; _LVORemoveGadget
move.l window,a0
move.l show_gg,a1
eor.w #$80,$0c(a1) ; gg_Activation
jsr -42(a6) _LVOAddGadget
move.l show_gg,a0
move.l window,a1
move.l #0,a2
moveq #1,d0
jsr -432(a6) ; _LVORefreshGList
bra get_msg
; ----- the following code shows an ASCII-Dump of the actual bb
; ----- using a reqtools-requester
show_bb movem.l d1/d2/d7/a0/a1/a2/a6,-(sp)
move.l 4.w,a6 ; mem to show bootblock
move.l #1024+18+78,d0 ; bb: 1024 CR: 18 info: 78
move.l #$10001,d1
jsr -198(a6) ; _LVOAllocMem
tst.l d0
beq .done
move.l d0,d7
move.l d0,a1
loclea show_text,a0 ; make head-information
moveq #77,d0
.loop0 move.b (a0)+,(a1)+
dbra d0,.loop0
move.l d7,a1
lea 25(a1),a1 ; 1st bb`s name
moveq #0,d0
move.b bb_id,d0
lsl.l #2,d0
lea.l gad0_lab,a0
lea.l (a0,d0.l),a0
move.l (a0),a0
moveq #-1,d0
.loop3 cmp.b #0,(a0)+
beq.s .goon1
addq.l #1,d0
bra.s .loop3
.goon1 lea.l -1(a0),a0
.loop4 move.b -(a0),-(a1)
dbra d0,.loop4
move.l d7,a1 ; 2nd bb`s FileSystem
lea 51(a1),a1
moveq #0,d0
move.b fs_id,d0
lsl.l #2,d0
lea gad1_lab,a0
lea.l (a0,d0.l),a0
move.l (a0),a0
moveq #-1,d0
.loop5 cmp.b #0,(a0)+
beq.s .goon2
addq.l #1,d0
bra.s .loop5
.goon2 lea.l -1(a0),a0
.loop6 move.b -(a0),-(a1)
dbra d0,.loop6
move.l d7,a1 ; 3rd bb`s checksum
lea 77(a1),a1
move.l bb_mem,a0
move.l 4(a0),d0
bsr.s .bbbin2hex
move.l d7,a1 ; now copy the bb to the buffer...
lea 78(a1),a1
move.l bb_mem,a0
moveq #15,d0 ; ...check for illegal ASCII...
.loop1 moveq #63,d1
move.b #10,(a1)+
.loop2 move.b (a0)+,(a1)
cmp.b #31,(a1)
bgt.s .goon4
move.b #".",(a1)
.goon4 lea.l 1(a1),a1
dbra d1,.loop2
dbra d0,.loop1
lea.l about_tags,a0 ; ...and setup the requester
move.l #0,ez_flags
move.l d7,a1
loclea show_gads,a2
bsr do_req
move.l d0,d2
.free_mem move.l d7,a1
move.l #1024+18+78,d0
jsr -210(a6) ; _LVOFreeMem
move.l #4,ez_flags
move.l d2,d0
.done movem.l (sp)+,d1/d2/d7/a0/a1/a2/a6
rts
.bbbin2hex lea hextab,a0 ; BIN: d0.l HEX: -(a1)
moveq #7,d1
.loop move.l d0,d2
and.l #15,d2
move.b (a0,d2),-(a1)
lsr.l #4,d0
dbra d1,.loop
rts
; ----- reads the bootblock from df0: into the buffer
read movem.l d0-d7/a0-a6,-(sp)
move.w #2,dev_cmd ; CMD_READ
moveq #0,d5 ; unit 0
bra do_device
******************************************************
* The following code is the modified GTB-Source. *
* *
* I know I should not patch it, but I did it for *
* faster work and the better "outfit" of my source. *
* Now the executable is shorter too. *
* *
* Some bugs I killed (maybe I created some new) *
* and some superfluous commands I removed. *
* *
* Hope you will understand this, Jan. Sorry... *
******************************************************
; ----- re-calculate the horizontal value for gadgets & bevel-boxes
compute_x move.l d1,-(sp)
move.w font_x,d1
mulu d1,d0
addq.w #4,d0
lsr.w #3,d0
ext.l d0
move.l (sp)+,d1
rts
; ----- re-calculate the vertikal value for gadgets & bevel-boxes
compute_y move.l d1,-(sp)
move.w font_y,d1
mulu d1,d0
addq.w #4,d0
lsr.w #3,d0
ext.l d0
move.l (sp)+,d1
rts
; ----- Calculate font`s size and check, if the window fits on the
; ----- screen using screen`s font. If not, use topaz 8.
compute_font lea.l attr,a0
move.l a0,font
move.l screen,a1
lea.l 84(a1),a1 ; sc_RastPort
move.l 52(a1),a1 ; rp_Font
move.l 10(a1),(a0) ; ?? (tf_Accessors)
move.w 20(a1),4(a0) ; tf_YSize
move.w 20(a1),font_y ; tf_YSize
.get_bigx moveq #100,d0 ; breitestes x-Zeichen finden
moveq #0,d1
move.l 40(a1),a0 ; tf_CharSpace
.find_x adda.l #2,a0
cmp.w (a0)+,d1
blt.s .get_it
dbra d0,.find_x
bra.s .found
.get_it move.w -2(a0),d1
dbra d0,.find_x
.found move.w d1,font_x
move.l screen,a0
move.b 36(a0),d0 ; sc_WBorLeft
ext.w d0
move.w d0,off_x
move.l 40(a0),a1 ; sc_Font
move.w 4(a1),d0 ; tf_XSize
addq.w #1,d0
move.b 35(a0),d1 ; sc_WBorTop
ext.w d1
add.w d1,d0
move.w d0,off_y
cmp.w #0,d2
beq.s .comp_done
cmp.w #0,d3
beq.s .comp_done
move.w d2,d0
bsr compute_x
add.w off_x,d0
move.b 37(a0),d1 ; sc_WBorRight
ext.w d1
add.w d1,d0
cmp.w 12(a0),d0 ; sc_Width
bhi.s .use_topaz
move.w d3,d0
bsr compute_y
add.w off_y,d0
move.b 38(a0),d1 : sc_WBorBottom
ext.w d1
add.w d1,d0
cmp.w 14(a0),d0 ; sc_Height
bhi.s .use_topaz
.comp_done rts
.use_topaz move.l font,a0
move.l #topaz_name,(a0) ; ta_Name
move.w #8,font_y
move.w #8,font_x
move.w #8,4(a0) ; ta_YSize
rts
; ----- get information about the active PubScreen
setup_scr movem.l d1-d3/a0-a2/a6,-(sp)
move.l intbase,a6
move.l pub_screen,a0
jsr -510(a6) ; _LVOLockPubScreen
move.l d0,screen
cmp.l #0,d0
beq.s .s_error
moveq #0,d2
moveq #0,d3
bsr compute_font
move.l screen,a0
move.l gadbase,a6
lea.l vi_tags,a1
jsr -126(a6) ; _LVOGetVisualInfoA
move.l d0,visualinfo
beq.s .v_error
moveq #0,d0
.done movem.l (sp)+,d1-d3/a0-a2/a6
rts
.s_error moveq #1,d0
bra.s .done
.v_error moveq #2,d0
bra.s .done
; ----- free the information
close_scr movem.l d0-d1/a0-a1/a6,-(sp)
move.l gadbase,a6
move.l visualinfo,a0
cmpa.l #0,a0
beq.s .no_vis
jsr -132(a6) ; _LVOFreeVisualInfo
move.l #0,visualinfo
.no_vis move.l intbase,a6
move.l #0,a0
move.l screen,a1
cmpa.l #0,a1
beq.s .no_scr
jsr -516(a6) ; _LVOUnlockPubScreen
move.l #0,screen
.no_scr movem.l (sp)+,d0-d1/a0-a1/a6
rts
; ----- draw the BackFill-Pattern (thanx Jan) and the BevelBox
; ----- into the window
wnd_render movem.l d0-d5/a0-a2/a6,-(sp)
move.l window,a0
bsr .draw_ptrn
move.l window,a0
move.w wnd_width,d2
move.w wnd_height,d3
bsr compute_font
move.l visualinfo,bevel_tags+4
move.l gadbase,a6
move.l window,a0
move.l 50(a0),a2 ; wd_RastPort
move.l a2,a0
lea.l bevel_tags,a1
moveq #3,d0
bsr compute_y
add.w off_y,d0
move.l d0,d1
move.l #418,d0 ; width of BevelBox
bsr compute_x
move.l d0,d2
moveq #42,d0 ; height of BevelBox
bsr compute_y
move.l d0,d3
moveq #7,d0 ; top edge of BevelBox
bsr compute_x
add.w off_x,d0
bsr.s .drawbevel
movem.l (sp)+,d0-d5/a0-a2/a6
rts
; ----- This is used instead of a simple DrawBevelBox(), because
; ----- the BackFill-Pattern is still visible IN the BevelBox after
; ----- DrawBevelBox(). So I have to clear the rect (using RectFill)
; ----- IN the BevelBox before calling DrawBevelBox()
.drawbevel movem.l d0-d3/a0/a1/a6,-(sp)
move.l screen,a0
move.l intbase,a6
jsr -690(a6) ; _LVOGetScreenDrawInfo
move.l d0,d6
move.l d0,a0
move.l $04(a0),a0 ; dri_Pens
move.w $0e(a0),d2 ; BACKGROUNDPEN
move.l screen,a0
move.l d6,a1
jsr -696(a6) ; _LVOFreeScreenDrawInfo
move.l a2,a1
moveq #0,d0
move.w d2,d0
move.l gfxbase,a6
jsr -342(a6) ; _LVOSetAPen
move.l a2,a1
movem.l (sp),d0-d3
add.l d0,d2
add.l d1,d3
subq.l #1,d2
subq.l #1,d3
jsr -306(a6) ; _LVORectFill
movem.l (sp)+,d0-d3/a0/a1/a6
jmp -120(a6) ; _LVODrawBevelBox
; ----- draw the BackFill-Pattern into the window and init str_extend
.draw_ptrn movem.l d1-d7/a0-a6,-(sp)
move.l a0,d7
move.l $2e(a0),a0 ; wd_WScreen
move.l intbase,a6
jsr -690(a6) ; _LVOGetScreenDrawInfo
cmp.l #0,d0
beq .failed
move.l d0,d6 ; d6: DrawInfo
move.l d0,a0
move.l $04(a0),a0 ; dri_Pens
move.w $06(a0),d5 ; d5: SHINEPEN
move.w $0e(a0),d4 ; d4: BACKGROUNDPEN
; ----- patch the String-Extend-Structure of the String-Gadget to
; ----- change the color through activation
move.l gad_list,a1
move.l (a1),a1
move.l (a1),a1
move.l (a1),a1 ; a1: ^StringGadget
move.l $22(a1),a1 ; a1: SpecialInfo
move.l $18(a1),a1 ; a1: StringExtend
move.b $05(a0),$04(a1) ; TEXTPEN
move.b $0f(a0),$05(a1) ; SHINEPEN
move.b $05(a0),$06(a1) ; TEXTPEN
move.b $07(a0),$07(a1) ; HIFILLPEN
; ----- ok, pen-copy done
move.l d7,a0
move.l $2e(a0),a0 ; wd_WScreen
move.l d6,a1
jsr -696(a6) ; _LVOFreeScreenDrawInfo
move.l d7,a0
move.l 50(a0),a0 ; wd_RastPort
move.l a0,d6 ; d6: RastPort
move.l #pattern,$08(a0) ; rp_AreaPtrn
move.b #1,$1d(a0) ; rp_AreaPtSize
move.l d6,a1
move.l d5,d0 ; SHINEPEN
move.l gfxbase,a6
jsr -342(a6) ; _LVOSetAPen
move.l d6,a1
move.l d4,d0 ; BACKGROUNDPEN
jsr -348(a6) ; _LVOSetBPen
move.l d6,a1
moveq #1,d0 ; JAM2
jsr -354(a6) ; _LVOSetDrMd
move.l d7,a0
moveq #0,d0
moveq #0,d1
moveq #0,d2
moveq #0,d3
moveq #0,d4
moveq #0,d5
move.b $36(a0),d0 ; wd_BorderLeft
move.b $37(a0),d1 ; wd_BorderTop
move.b $38(a0),d4 ; wd_BorderRight
move.b $39(a0),d5 ; wd_BorderBottom
move.w $08(a0),d2 ; wd_Width
sub.w d4,d2
move.w $0a(a0),d3 ; wd_Height
sub.w d5,d3
move.l d6,a1
jsr -306(a6) ; _LVORectFill
move.l d6,a0
move.l #0,$08(a0)
move.b #0,$1d(a0)
moveq #0,d0 ; all ok
movem.l (sp)+,d1-d7/a0-a6
rts
.failed moveq #-1,d0 ; no DrawInfo
movem.l (sp)+,d1-d7/a0-a6
rts
; ----- open the xInstall-Window (font-sensitive !)
; ----- 1. calculate window`s dimensions and check if it
; ----- fits to the screen
; ----- 2. create the gadget-list (font-sensitive)
; ----- 3. open the window
; ----- 4. render the pattern and the bevel-box
; ----- 5. add the gadget-list to the window
setup_wnd movem.l d1-d4/a0-a4/a6,-(sp)
move.l screen,a0
moveq #0,d3
moveq #0,d2
move.w wnd_width,d2
move.w wnd_height,d3
bsr compute_font
move.l screen,a0
move.l d2,d0
bsr compute_x
move.l d0,d4
move.w wnd_left,d2
add.w d2,d0
add.w off_x,d0
move.b 37(a0),d1 ; sc_WBorRight
ext.w d1
add.w d1,d0
cmp.w 12(a0),d0 ; sc_Width
bls.s .width_ok
move.w 12(a0),d0 ; sc_Width
sub.w d4,d0
move.w d0,d2
.width_ok move.l d3,d0
bsr compute_y
move.l d0,d4
move.w wnd_top,d3
add.w d3,d0
add.w off_y,d0
move.b 38(a0),d1 ; sc_WBorBottom
ext.w d1
add.w d1,d0
cmp.w 14(a0),d0 ; sc_Height
bls.s .height_ok
move.w 14(a0),d0 ; sc_Height
sub.w d4,d0
move.w d0,d3
.height_ok move.l gadbase,a6
lea.l gad_list,a0
jsr -114(a6) ; _LVOCreateContext
move.l d0,a3
cmp.l #0,d0
beq .c_error
movem.w d2-d3,-(sp)
moveq #0,d3
lea.l gad_tags,a4
.make_gads move.l 4.w,a6
lea.l new_gads,a0
move.l d3,d0
mulu #30,d0
add.l d0,a0
lea.l ng_buffer,a1
moveq #30,d0
jsr -624(a6) ; _LVOCopyMem
lea.l ng_buffer,a0
move.l visualinfo,22(a0) ; ng_VisualInfo
move.l font,12(a0) ; ng_GadgetFont
move.w (a0),d0 ; ng_Left
bsr compute_x
add.w off_x,d0
move.w d0,(a0)
move.w 2(a0),d0 ; ng_Top
bsr compute_y
add.w off_y,d0
move.w d0,2(a0)
move.w 4(a0),d0 ; ng_Width
bsr compute_x
move.w d0,4(a0)
move.w 6(a0),d0 ; ng_Height
bsr compute_y
move.w d0,6(a0)
move.l gadbase,a6
lea.l gad_types,a0
moveq #0,d0
move.l d3,d1
asl.l #1,d1
add.l d1,a0
move.w (a0),d0
move.l a3,a0
lea.l ng_buffer,a1
move.l a4,a2
jsr -30(a6) ; _LVOCreateGadgetA
cmp.l #0,d0
bne.s .create_ok
movem.w (sp)+,d2-d3
bra .g_error
.create_ok
; ----- make Show a ToggleSelect-Button
movem.l a0,-(sp)
move.l d0,a0
cmp.w #8,$26(a0) ; gg_GadgetID
bne.s .goon1
eor.w #$100,$0e(a0) ; gg_Activation
move.l a0,show_gg
.goon1 movem.l (sp)+,a0
; ----- done
move.l d0,a3
move.l d3,d0
asl.l #2,d0
lea.l gadgets,a0
add.l d0,a0
move.l a3,(a0)
.tag_loop tst.l (a4)
beq.s .do_next
addq.w #8,a4
bra.s .tag_loop
.do_next addq.w #4,a4
addq.w #1,d3
cmp.w #gad_count,d3
bmi .make_gads
movem.w (sp)+,d2-d3
move.l screen,tag_screen+4
ext.l d2
ext.l d3
move.l d2,tag_left+4
move.l d3,tag_top+4
move.l screen,a0
move.w wnd_width,d0
bsr compute_x
add.w off_x,d0
move.b 37(a0),d1 ; sc_WBorRight
ext.w d1
add.w d1,d0
move.l d0,tag_width+4
move.w wnd_height,d0
bsr compute_y
add.w off_y,d0
move.b 38(a0),d1 ; sc_WBorBottom
ext.w d1
add.w d1,d0
move.l d0,tag_height+4
move.l intbase,a6
move.l #0,a0
lea.l window_tags,a1
jsr -606(a6) ; _LVOOpenWindowTagList
move.l d0,window
beq.s .w_error
bsr wnd_render
move.l window,a0
move.l gad_list,a1
moveq #-1,d0
moveq #-1,d1
move.l #0,a2
move.l intbase,a6
jsr -438(a6) ; _LVOAddGList
move.l gad_list,a0
move.l window,a1
moveq #-1,d0
jsr -432(a6) ; _LVORefreshGList
move.l window,a0
move.l #0,a1
move.l gadbase,a6
jsr -84(a6) ; _LVOGT_RefreshWindow
moveq #0,d0
.done movem.l (sp)+,d1-d4/a0-a4/a6
rts
.c_error moveq #1,d0
bra.s .done
.g_error moveq #2,d0
bra.s .done
.w_error moveq #4,d0
bra.s .done
; ----- close the window
close_wnd movem.l d0-d1/a0-a2/a6,-(sp)
move.l intbase,a6
move.l window,a0
cmpa.l #0,a0
beq.s .no_wnd
jsr -72(a6) ; _LVOCloseWindow
move.l #0,window
.no_wnd move.l gadbase,a6
move.l gad_list,a0
cmp.l #0,a0
beq.s .no_gads
jsr -36(a6) ; _LVOFreeGadgets
move.l #0,gad_list
.no_gads movem.l (sp)+,d0-d1/a0-a2/a6
rts
; ----- this gets the loc-string or the default (english)
get_string movem.l d0/d1/a0/a1/a6,-(sp)
move.l catalog,d0
beq.s .done
move.l 24(sp),a1 ; a1 -> string
moveq #0,d0
move.l a1,d1
lea.l locale_start,a0
sub.l a0,d1
beq.s .get_it
.loop tst.b (a0)+
bne.s .ok
addq.l #1,d0
.ok subq.l #1,d1
bne.s .loop
.get_it move.l locbase,a6
move.l catalog,a0
jsr -72(a6) ; _LVOGetCatalogStr
move.l d0,24(sp)
.done movem.l (sp)+,d0/d1/a0/a1/a6
rts
SECTION "xInstall_DATA",DATA
******************************************************
* XInstall v1.4 *
* now all datas, structures etc *
******************************************************
dc.b "$VER: xInstall 1.4 (30.09.94)"
even
req_name dc.b "reqtools.library",0
even
dos_name dc.b "dos.library",0
even
loc_name dc.b "locale.library",0
even
cat_name dc.b "xinstall.catalog",0
even
track_name dc.b "trackdisk.device",0
even
port_name dc.b "xInstall_PORT",0
cnop 0,4
pattern dc.w $aaaa,$5555
thistask dc.l 0
reqbase dc.l 0
intbase dc.l 0
gfxbase dc.l 0
dosbase dc.l 0
gadbase dc.l 0
locbase dc.l 0
bb_mem dc.l 0
wbenchmsg dc.l 0
catalog dc.l 0
show_gg dc.l 0
dev_cmd dc.w 3
dis_tab dc.l 6,7
getfile_1 dc.l 0
disk_io ds.b 20 ; Message-Structure
ds.l 1 ; Ptr Device-Structure
ds.l 1 ; Ptr Unit-Structure
ds.w 1 ; Device-Kommand
ds.b 1 ; Flags
ds.b 1 ; Error
ioext_requ ds.l 1 ; Bytes
ds.l 1
ds.l 1 ; Ptr DataBuffer
ds.l 1 ; Offset (Startblock)
cnop 0,4
replyport ds.b 14 ; Node-Structure
ds.b 1 ; Flags
ds.b 1 ; Signal-Bits
ds.l 1 ; Ptr to Task
ds.b 60 ; Message-List
cnop 0,4
; ----- Defs 4 About-Requester (text: look at LOCALE at the bottom...)
about_tags dc.l rt_window,0
dc.l rt_lockwindow,1
dc.l rt_reqpos,0
dc.l rt_screentofront,1
dc.l rt_underscore,"_"
dc.l rtez_reqtitle,reqtitle
dc.l rtez_flags
ez_flags dc.l 4
dc.l 0
about_gad dc.b "_OK",0
even
reqtitle dc.b "xInstall v1.4",0
even
; ----- Examine-Buffer
cnop 0,4
examine_bf ds.b 260
even
; ----- Defs 4 FileRequester
freq_tags dc.l rt_window,0
dc.l rt_lockwindow,1
dc.l rt_reqpos,0
dc.l rt_screentofront,1
dc.l rt_underscore,"_"
dc.l rtfi_flags,$10
dc.l 0
freq_array ds.b 108
even
bb_path ds.b 256
even
; ----- Defs 4 Enter-Scroll-Text-Requester
scrl_tags dc.l rt_window,0
dc.l rt_lockwindow,1
dc.l rt_reqpos,0
dc.l rt_screentofront,1
dc.l rt_underscore,"_"
dc.l rtez_flags,4
dc.l rtgs_allowempty,0
dc.l rtgs_textfmt,0
dc.l 0
; ----- other definitions
bb_table dc.l cleared,cleared_end
dc.l standart,standart_end
dc.l message,message_end
dc.l scroller,scroller_end
dc.l memtest,memtest_end
gtcy_act dc.l gtcy_active,1
dc.l 0
bb_id dc.b 0
even
fs_id dc.b 0
even
stringtags dc.l gtst_string,0
dc.l 0
jmp_tab1 dc.l bootblock1 ; Cycle "Bootblock"
dc.l filesys1 ; Cycle "FileSys"
dc.l df0,df1,df2,df3 ; Buttons df0-df3
dc.l read ; Button "Read"
dc.l load ; Button "Load"
dc.l get_msg ; Button "Show"
dc.l about ; Button "Show"
jmp_tab2 dc.b "Q",0 ; this tab I need to get
dc.l quit ; the adress of the routine
dc.b "B",0 ; to jump to if the under-
dc.l bootblock2 ; scored character was
dc.b "F",0 ; pressed
dc.l filesys2
dc.b "q",0
dc.l quit
dc.b "b",0
dc.l bootblock2
dc.b "f",0
dc.l filesys2
dc.b "0",0
dc.l df0
dc.b "1",0
dc.l df1
dc.b "2",0
dc.l df2
dc.b "3",0
dc.l df3
about_key1 dc.w 0
dc.l about
show_key1 dc.w 0
dc.l show
read_key1 dc.w 0
dc.l read
load_key1 dc.w 0
dc.l load
about_key2 dc.w 0
dc.l about
show_key2 dc.w 0
dc.l show
read_key2 dc.w 0
dc.l read
load_key2 dc.w 0
dc.l load
dc.b 0 ; this is the end of tab
even
; ----- Errors trackdisk.device (will be initialized later)
td_errtab dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
opt o+,p+
; ----- BootBlock: DOS CLEARED (what a nice BB)
cleared dc.l $444f5300 ; DOS,0
dc.l $00000000 ; later CheckSum
dc.l $00000370 ; ptr to disk`s RootBlock
cleared_end
; ----- BootBlock: STANDART (BORING, isn`t it ??)
standart dc.l $444f5300 ; Standart-Bootcode
dc.l $00000000
dc.l $00000370
lea.l exp_libra(pc),a1
moveq #37,d0
jsr -552(a6) ; _LVOOpenLibrary
cmp.l #0,d0
beq.s .no_explib
move.l d0,a1
bset #6,34(a1)
jsr -414(a6) ; _LVOCloseLibrary
.no_explib lea.l dos_libra(pc),a1
jsr -96(a6) ; _LVOFindResident
cmp.l #0,d0
beq.s .not_found
move.l d0,a0
move.l 22(a0),a0
moveq #0,d0
rts
.not_found moveq #-1,d0
rts
exp_libra dc.b "expansion.library",0
dos_libra dc.b "dos.library",0
standart_end
; ----- BootBlock: MESSAGE (this is not so boring, or ??)
message dc.l $444f5300
dc.l $00000000
dc.l $00000370
move.l 4.w,a6
jsr -132(a6) ; _LVOForbid
.alloc_mem move.l #320+12+100+108,d0 ; BitPlane+BitMap+RastPort+CopperList
move.l #$10002,d1 ; MEMF_CHIP|MEMF_CLEAR
jsr -198(a6) ; _LVOAllocMem
cmp.l #0,d0
beq .dos_boot
move.l d0,d7
.open_gfx lea.l gfx_libr(pc),a1
moveq #33,d0
jsr -552(a6) ; _LVOOpenLibrary
cmp.l #0,d0
beq .free_mem
move.l d0,a6
move.l d7,a1 ; init what U need, my son
lea.l 320+12(a1),a1
jsr -198(a6) ; _LVOInitRastPort
move.l d7,a0
lea.l 320(a0),a0
moveq #1,d0
move.l #320,d1
moveq #8,d2
jsr -390(a6) ; _LVOInitBitMap
move.l d7,a0
lea.l 320+12(a0),a0
move.l d7,a1
lea.l 320(a1),a1
move.l d7,a2
move.l a1,$04(a0)
move.l a2,$08(a1)
move.l d7,a1
lea.l 320+12(a1),a1
moveq #52,d0
moveq #6,d1
jsr -240(a6) ; _LVOMove
move.l d7,a1
lea.l 320+12(a1),a1
lea.l boot_text(pc),a0
moveq #24,d0
jsr -60(a6) ; _LVOText
moveq #107,d0
move.l d7,a0
lea.l 320+12+100(a0),a0
move.l a0,a2
lea.l coplist(pc),a1
.loop move.b (a1)+,(a0)+
dbf d0,.loop
move.l d7,d0
move.w d0,46(a2)
swap d0 ; BPL1PTH / BPL1PTL
move.w d0,42(a2)
lea.l $dff000,a0
move.l a2,$080(a0) ; COP1LCH
move.w #0,$088(a0) ; COPJMP1
move.w #$8300,$096(a0) ; DMACON
move.w #$000c,d1 ; wait a little bit
move.w #$ffff,d0 ; (sorry for polling !)
.wait nop
nop
dbf.w d0,.wait
dbf.w d1,.wait
move.l $26(a6),$080(a0) ; COP1LCH
move.w #0,$088(a0)
.close_gfx move.l a6,a1
move.l 4.w,a6
jsr -414(a6) ; _LVOCloseLibrary
.free_mem move.l d7,a1
move.l #320+12+100+108,d0
jsr -210(a6) ; _LVOFreeMem
jsr -138(a6) ; _LVOPermit
.dos_boot lea.l exp_libr(pc),a1 ; now the standard-code
moveq #37,d0 ; (don`t forget it - never !)
jsr -552(a6) ; _LVOOpenLibrary
cmp.l #0,d0
beq.s no_explib
move.l d0,a1
bset #6,34(a1)
jsr -414(a6) ; _LVOCloseLibrary
no_explib lea.l dos_libr(pc),a1
jsr -96(a6) ; _LVOFindResident
cmp.l #0,d0
beq.s not_found
move.l d0,a0
move.l 22(a0),a0
moveq #0,d0
rts
not_found moveq #-1,d0
rts
gfx_libr dc.b "graphics.library",0
even
dos_libr dc.b "dos.library",0
even
exp_libr dc.b "expansion.library",0
even
boot_text dc.b "No Virus on Bootblock !!",0
even
; ----- this is the Copperlist you need !!
coplist dc.w $2001,$fffe
dc.w $0100 ; BPLCON0
dc.w $0200
dc.w $008e ; DIWSTRT
dc.w $0581
dc.w $0090 ; DIWSTOP
dc.w $40c1
dc.w $0092 ; DDFSTRT
dc.w $0038
dc.w $0094 ; DDFSTOP
dc.w $00d0
dc.w $0102 ; BPLCON1
dc.w $0000
dc.w $0104 ; BPLCON2
dc.w $0024
dc.w $0108 ; BPL1MOD
dc.w $0000
dc.w $010a ; BPL2MOD
dc.w $0000
dc.w $00e0 ; BPL1PTH
dc.w 0
dc.w $00e2 ; BPL1PTL
dc.w 0
dc.w $182 ; COLOR01
dc.w $00f0
dc.w $180 ; COLOR00
dc.w $0040
dc.w $9b0f ; line
dc.w $fffe
dc.w $180 ; COLOR00
dc.w $00f0
dc.w $9d0f ; line
dc.w $fffe
dc.w $180 ; COLOR00
dc.w $0000
dc.w $a20f,$fffe
dc.w $0100 ; BPLCON0
dc.w $1200
dc.w $a90f,$fffe
dc.w $0100 ; BPLCON0
dc.w $0200
dc.w $af0f ; line
dc.w $fffe
dc.w $180 ; COLOR00
dc.w $00f0
dc.w $b10f ; line
dc.w $fffe
dc.w $180 ; COLOR00
dc.w $0040
dc.l $fffffffe ; End of CopperList
coplist_end
message_end
; ----- BootBlock: MEMTEST (exactly 1024 Bytes !!!)
; ----- there is a little bug (do you find it, guy ??), but if you
; ----- have a "normal" AMIGA the bug will never appear !
memtest dc.l $444f5300 ; DOS-Disk OFS
dc.l $00000000 ; CheckSum
dc.l $00000370 ; RootBlock pointer
; ----- Standart-DOS-Bootcode
.dos_boot lea.l exp_lib(pc),a1 ; Standard OS2.0 code
moveq #37,d0
jsr -552(a6) ; _LVOOpenLibrary
cmp.l #0,d0
beq.s .no_explib
move.l d0,a1
bset #6,34(a1)
jsr -414(a6) ; _LVOCloseLibrary
.no_explib lea.l dos_lib(pc),a1
jsr -96(a6) ; _LVOFindResident
cmp.l #0,d0
beq.s .not_found
move.l d0,a0
move.l 22(a0),a0
moveq #0,d0
bra.s .own_boot
.not_found moveq #-1,d0
; ----- MemTest-Routine
.own_boot movem.l d0-d7/a0-a6,-(sp)
cmp.b #50,530(a6) ; NTSC-Display ?? (PAL -> 50Hz)
bne .softreset
cmp.l #0,42(a6) ; ColdCapture
bne .vecs_bad
cmp.l #0,46(a6) ; CoolCapture
bne .vecs_bad
cmp.l #0,546(a6) ; KickMemPtr
bne .vecs_bad
cmp.l #0,550(a6) ; KickTagPtr
bne .vecs_bad
cmp.l #0,554(a6) ; KickCheckSumPtr
bne .vecs_bad
; ----- setup green CopperList, wait and terminate
.vecs_ok move.l #cop_end-cop_start,d0
moveq #2,d1
jsr -198(a6) ; _LVOAllocMem
lea.l cop_adress(pc),a0
move.l d0,(a0)
beq.s .back_1
lea.l cop_start(pc),a0
move.l cop_adress(pc),a1
move.l #cop_end-cop_start-1,d0
.cl_copy move.b (a0)+,(a1)+
dbf d0,.cl_copy
jsr -132(a6) ; _LVOForbid
lea.l $dff000,a5
move.w #$03a0,$96(a5) ; DMACON
move.l cop_adress(pc),$80(a5) ; COP1LCH
move.w #0,$88(a5) ; COPJMP1
move.w #$8280,$96(a5) ; DMACON
moveq #$c,d1
move.l #$ffff,d0
.wait_loop nop ; wait (Polling)
dbra d0,.wait_loop
dbra d1,.wait_loop
lea.l gfx_lib(pc),a1
moveq #33,d0
jsr -552(a6) ; _LVOOpenLibrary
move.l d0,a4
move.l 38(a4),$80(a5) ; COP1LCH
move.w #0,$88(a5) ; COPJMP1
move.w #$83e0,$96(a5) ; DMACON
jsr -138(a6) ; _LVOPermit
move.l cop_adress(pc),a1
move.l #cop_end-cop_start,d0
jsr -210(a6) ; _LVOFreeMem
.back_1 movem.l (sp)+,d0-d7/a0-a6
rts
; ----- setup Error-Alert
.vecs_bad lea.l bad_text(pc),a1
lea.l 71(a1),a1
move.l 42(a6),d0 ; ColdCapture
bsr .bbbin2hex
lea.l 36(a1),a1
move.l 46(a6),d0 ; CoolCapture
bsr .bbbin2hex
lea.l 27(a1),a1
move.l 546(a6),d0 ; KickMemPtr
bsr .bbbin2hex
lea.l 36(a1),a1
move.l 550(a6),d0 ; KickTagPtr
bsr .bbbin2hex
lea.l 33(a1),a1
move.l 554(a6),d0 ; KickCheckSumPtr
bsr .bbbin2hex
lea.l 35(a1),a1
move.l 300(a6),d0 ; ResModules
bsr .bbbin2hex
lea.l int_lib(pc),a1
moveq #33,d0
jsr -552(a6) ; _LVOOpenLibrary
move.l d0,a6
beq.s .back_2
lea.l bad_text(pc),a0
moveq #1,d0
moveq #95,d1
jsr -90(a6) ; _LVODisplayAlert
cmp.l #0,d0
beq.s .coldreset
move.l a6,a1
move.l 4.w,a6
jsr -414(a6) ; _LVOCloseLibrary
.back_2 movem.l (sp)+,d0-d7/a0-a6
rts
; ----- make ColdReset (sorry, this is NOT the StyleGuide-Reset,
; ----- but this works too)
.coldreset move.l 4.w,a6
jsr -132(a6) ; _LVOForbid
move.l #0,38(a6) ; Exec_ChkBase
move.l #0,42(a6) ; ColdCapture
move.l #0,46(a6) ; CoolCapture
move.l #0,82(a6) ; Exec_ChkSum
move.l #0,300(a6) ; ResModules
move.l #0,546(a6) ; KickMemPtr
move.l #0,550(a6) ; KickTagPtr
move.l #0,554(a6) ; KickCheckSumPtr
; ----- make Soft-Reset
.softreset jsr -150(a6) ; _LVOSuperState
move.l #$fc0002,$20.w
movea.l #$f80002,a0
reset ; reserved Cmd (SuperVisor)
jmp (a0)
; ----- Bin -> ASCII-Hex
.bbbin2hex lea.l 8(a1),a1
lea.l hextab(pc),a0
moveq #7,d1
.loop move.l d0,d2
and.l #15,d2
move.b (a0,d2),-(a1)
lsr.l #4,d0
dbra d1,.loop
rts
; ----- CopperList (oh what a sweet list !)
cop_start dc.w $180,$00d0
dc.w $7007,$fffe
dc.w $180,$0080
dc.w $d00d,$fffe
dc.w $180,$0040
dc.w $ffff,$fffe
cop_end
; ----- Variablen/Konstanen
cop_adress dc.l 0
hextab dc.b "0123456789ABCDEF"
exp_lib dc.b "expansion.library",0
dos_lib dc.b "dos.library",0
gfx_lib dc.b "graphics.library",0
int_lib dc.b "intuition.library",0
bad_text dc.b 0,128,15
dc.b "Some of your Vectors are not pointing to zero !!"
dc.b 0,$ff,0,80,40
dc.b "ColdCapture: CoolCapture: "
dc.b 0,$ff,0,80,50
dc.b "KickMemPtr: KickTagPtr: "
dc.b 0,$ff,0,80,60
dc.b "KickCheckSumPtr: ResModulesBase: "
dc.b 0,$ff,0,24,85
dc.b "* [LMB] to continue * * [RMB] to ColdReset *"
dc.b 0,0
dc.b 0,"** MemTest V1.2 - 1993 by Jens Troeger **"
memtest_end
; ----- BootBlock: SCROLLER
; ----- thanx to Holger Gzella for his help !
scroller dc.l $444f5300 ; Standart-Bootcode
dc.l $00000000
dc.l $00000370
.scroller lea.l fontname(pc),a0 ; alloc and init all you need
lea.l textattr(pc),a1
move.l a0,(a1)
lea.l gfxname(pc),a1
moveq #33,d0
move.l 4.w,a6
jsr -552(a6) ; _LVOOpenLibrary
cmp.l #0,d0
beq .error_1
lea.l gfx_base(pc),a0
move.l d0,(a0)
move.l d0,a6
lea.l textattr(pc),a0
jsr -72(a6) ; _LVOOpenFont
cmp.l #0,d0
beq .error_2
lea.l fontbase(pc),a0
move.l d0,(a0)
move.l #2000,d0
move.l #$10002,d1
move.l 4.w,a6
jsr -198(a6) ; _LVOAllocMem
cmp.l #0,d0
beq .error_3
lea.l copperlist(pc),a0
move.l d0,(a0)
move.l #52*345,d0
move.l #$10002,d1
move.l 4.w,a6
jsr -198(a6) ; _LVOAllocMem
cmp.l #0,d0
beq .error_4
lea.l bitplane(pc),a0
move.l d0,(a0)
jsr -132(a6) ; _LVOForbid
move.w #$3e0,$DFF096 ; DMACON
move.l copperlist(pc),a0 ; create the CopperList
move.l bitplane(pc),d2
swap d2
move.w #$0E0,(a0)+ ; BPL1PTH
move.w d2,(a0)+
move.w #$0E2,(a0)+ ; BPL1PTL
swap d2
move.w d2,(a0)+
move.w #$180,(a0)+ ; COLOR00
move.w #$000,(a0)+
move.w #$182,(a0)+ ; COLOR01
move.w #$000,(a0)+
move.w #$9001,d0 ; create CopperList
move.w #$0000,d1 ; the colors now...
moveq #$e,d2
.set_list1 move.w d0,(a0)+
move.w #$fffe,(a0)+
move.w #$180,(a0)+
move.w d1,(a0)+
add.w #$100,d0
add.w #$101,d1
dbra d2,.set_list1
moveq #$f,d2
add.w #$a00,d0
.set_list2 move.w d0,(a0)+
move.w #$fffe,(a0)+
move.w #$180,(a0)+
move.w d1,(a0)+
add.w #$100,d0
sub.w #$101,d1
dbra d2,.set_list2
move.l #$fffffffe,(a0) ; end of list
move.l copperlist(pc),$DFF080 ; COP1LCH
move.w #0,$DFF088 ; COPJMP1
move.w #$1AC4,$DFF08E ; DIWSTRT
move.w #$39D8,$DFF090 ; DIWSTOP
move.w #$0020,$DFF092 ; DDFSTRT
move.w #$00D8,$DFF094 ; DDFSTOP
move.w #$1000,$DFF100 ; BPLCON0
move.w #0,$DFF102 ; BPLCON1
move.w #0,$DFF104 ; BPLCON2
move.w #4,$DFF108 ; BPL1MOD
move.w #4,$DFF10A ; BPL2MOD
move.w #$83C0,$DFF096 ; DMACON
moveq.l #0,d6
lea.l scrl_bufr(pc),a6
.scrollit and.l #$7,d6 ; now we scroll the text
bne.s .scrollon
move.l fontbase(pc),a0
move.l 34(a0),a3
move.w 38(a0),d4
move.w d4,d5
mulu #7,d4
add.l d4,a3
moveq.l #0,d1
move.b (a6)+,d1
bne.s .not_last
lea.l scrl_bufr(pc),a6
move.b (a6)+,d1
.not_last cmp.b #127,d1
bls.s .no_spec
sub.b #32,d1
.no_spec sub.b #32,d1
add.l d1,a3
.scrollon move.l bitplane(pc),a0
add.l #143*52,a0
moveq #7,d1
move.l a3,a5
.sync_beam move.l $DFF004,d3 ; VPOSR
and.l #$1ff00,d3
cmp.l #$08000,d3
bne.s .sync_beam
addq.b #$8,d6
.scroll_pl moveq.l #25,d3
moveq #0,d2
move.b (a5),d2
sub.l d5,a5
roxl.w #1,d2
roxl.w d6,d2
.scrl_wrd roxl.w -(a0)
dbra d3,.scrl_wrd
dbra d1,.scroll_pl
addq #1,d6
btst.b #6,$bfe001 ; PRA (CIA-A)
bne.s .scrollit
move.l #0,$DFF088 ; COPJMP1
move.w #$83E0,$DFF096 ; DMACON
move.l 4.w,a6
jsr -138(a6) ; _LVOPermit
move.l Bitplane(pc),a1
move.l #52*345,d0
jsr -210(a6) ; _LVOFreeMem
.error_4 move.l copperlist(pc),a1
move.l #2000,d0
move.l 4.w,a6
jsr -210(a6) ; _LVOFreeMem
.error_3 move.l fontbase(pc),a1
move.l gfx_base(pc),a6
jsr -78(a6) ; _LVOCloseFont
.error_2 move.l gfx_base(pc),a1
move.l 38(a1),$DFF080 ; COP1LCH
move.l 4.w,a6
jsr -414(a6) ; _LVOCloseLibrary
.error_1 lea.l expname(pc),a1
moveq #37,d0
jsr -552(a6) ; _LVOOpenLibrary
cmp.l #0,d0
beq.s .no_explib
movea.l d0,a1
bset #6,34(a1)
jsr -414(a6) ; _LVOCloseLibrary
.no_explib lea.l dosname(pc),a1
jsr -96(a6) ; _LVOFindResident
cmp.l #0,d0
beq.s .not_found
movea.l d0,a0
movea.l 22(a0),a0
moveq #0,d0
rts
.not_found moveq #-1,d0
rts
gfx_base dc.l 0
fontbase dc.l 0
copperlist dc.l 0
bitplane dc.l 0
textattr dc.l 0
dc.w 8
dc.b 0,1
gfxname dc.b "graphics.library",0
even
dosname dc.b "dos.library",0
even
expname dc.b "expansion.library",0
even
fontname dc.b "topaz.font",0
even
scrl_bufr ds.b 50
even
scroller_end
opt p-
******************************************************
* Below you find the modified GTB-datas used by *
* the modified GTB-source above. *
* *
* Excuse me, Jan, for this. But this works a little *
* bit better and the executable is much smaller *
******************************************************
gad_count equ 10 ; number of gadgets
screen dc.l 0 ; certain pointers etc.
visualinfo dc.l 0
pub_screen dc.l 0
window dc.l 0
gad_list dc.l 0
vi_tags dc.l 0
font dc.l 0
font_x dc.w 0
font_y dc.w 0
off_x dc.w 0
off_y dc.w 0
gadgets dcb.l 10,0 ; needed by gadget-creation
attr dc.l 0 ; for topaz.font
dc.w 0
dc.b 0,0
ng_buffer dc.w 0,0,0,0 ; later this newgadget-struc
dc.l 0,0 ; will be filled
dc.w 0
dc.l 0,0,0
bevel_tags dc.l $80080034,$00000000 ; tags 4 bevelbox
dc.l $80080033,$00000000
dc.l $00000000
wnd_left dc.w 0 ; window`s position
wnd_top dc.w 11 ; (if font = topaz 8)
wnd_width dc.w 433
wnd_height dc.w 64
topaz_name dc.b "topaz.font",0
even
gad_types dc.w 7 ; the gadget-types
dc.w 7 ; 2x CycleGad
dc.w 1 ; and Buttons
dc.w 1
dc.w 1
dc.w 1
dc.w 1
dc.w 1
dc.w 1
dc.w 1
new_gads dc.w 95,7,120,14 ; CYCLE: Bootblock
dc.l gadget0txt,0
dc.w 0
dc.l $01,0,0
dc.w 95,23,120,14 ; CYCLE: FileSys
dc.l gadget1txt,0
dc.w 1
dc.l $01,0,0
dc.w 7,48,91,14 ; BUTTON: df0
dc.l gadget2txt,0
dc.w 2
dc.l $10,0,0
dc.w 116,48,91,14 ; BUTTON: df1
dc.l gadget3txt,0
dc.w 3
dc.l $10,0,0
dc.w 225,48,91,14 ; BUTTON: df2
dc.l gadget4txt,0
dc.w 4
dc.l $10,0,0
dc.w 334,48,91,14 ; BUTTON: df3
dc.l gadget5txt,0
dc.w 5
dc.l $10,0,0
dc.w 233,23,89,14 ; BUTTON: Read
gad6_text dc.l 0,0
dc.w 6
dc.l $10,0,0
dc.w 326,23,89,14 ; BUTTON: Load
gad7_text dc.l 0,0
dc.w 7
dc.l $10,0,0
dc.w 326,7,89,14 ; BUTTON: Show
gad8_text dc.l 0,0
dc.w 8
dc.l $10,0,0
dc.w 233,7,89,14 ; BUTTON: About
gad9_text dc.l 0,0
dc.w 9
dc.l $10,0,0
gad_tags dc.l $8008000E,gad0_lab ; tags for every gadget
dc.l $80080040,"_"
dc.l $00000000
dc.l $8008000E,gad1_lab
dc.l $80080040,"_"
dc.l $00000000
dc.l $80080040,"_"
dc.l $00000000
dc.l $80080040,"_"
dc.l $00000000
dc.l $80080040,"_"
dc.l $00000000
dc.l $80080040,"_"
dc.l $00000000
dc.l $80080040,"_"
dc.l $00000000
dc.l $80080040,"_"
dc.l $00000000
dc.l $80080040,"_"
dc.l $00000000
dc.l $80080040,"_"
dc.l $00000000
gadget0txt dc.b "_Bootblock",0 ; gadget`s texts
even
gadget1txt dc.b "_FileSys",0
even
gadget2txt dc.b "DF_0",0
even
gadget3txt dc.b "DF_1",0
even
gadget4txt dc.b "DF_2",0
even
gadget5txt dc.b "DF_3",0
even
gad0_lab dc.l 0,0,0,0,0,0,0 ; labels for both CycleGads
gad1_lab dc.l gad1lab0
dc.l gad1lab1
dc.l gad1lab2
dc.l gad1lab3
dc.l gad1lab4
dc.l gad1lab5
dc.l 0
gad1lab0 dc.b "OFS",0
even
gad1lab1 dc.b "FFS",0
even
gad1lab2 dc.b "OFS int",0
even
gad1lab3 dc.b "FFS int",0
even
gad1lab4 dc.b "DC-OFS",0
even
gad1lab5 dc.b "DC-FFS",0
even
window_tags ; tags for window...
tag_left dc.l $80000064,0
tag_top dc.l $80000065,0
tag_width dc.l $80000066,0
tag_height dc.l $80000067,0
dc.l $8000006A,$00200244
dc.l $8000006B,$0001100E
dc.l $8000006E,wnd_title
dc.l $8000006F,scr_title
tag_screen dc.l $80000079,0
dc.l $00000000
wnd_title dc.b "xInstall v1.4 © 1994 by Jens Tröger",0
even
scr_title dc.b "xInstall v1.4",0
even
; ----- the localized texts
; ----- (the catalog was created with MakeCat 38.05)
; ----- Are there more trackdisk-errors I do not know ?? These are Kick 1.3
; ----- errors, the new I did not found anywhere !!! Can somebody help me ?
LOCALE_START
; CATALOG xinstall
; VERSION 1.4
; CATDATE 30.09.94
err_txt1 dc.b "Cannot open trackdisk.device",0
; D "Kann trackdisk.device nicht öffnen",0
err_txt2 dc.b "TDError #20: Error not specified",0
; D "TDFehler #20: Fehler nicht spezifizierbar",0
err_txt3 dc.b "TDError #21: No Sector-Header",0
; D "TDFehler #21: Sektor-Kopf nicht gefunden",0
err_txt4 dc.b "TDError #22: Bad Sector Preamble",0
; D "TDFehler #22: Fehler in Sektor-Präambel",0
err_txt5 dc.b "TDError #23: Bad Sector ID",0
; D "TDFehler #23: Fehler in Sektor-ID",0
err_txt6 dc.b "TDError #24: Bad Header CheckSumm",0
; D "TDFehler #24: Checksummen-Fehler im Header",0
err_txt7 dc.b "TDError #25: Bad Sector CheckSumm",0
; D "TDFehler #25: Checksummen-Fehler im Sektor",0
err_txt8 dc.b "TDError #26: Too few Sectors",0
; D "TDFehler #26: Zuwenige Sektoren auf Track",0
err_txt9 dc.b "TDError #27: Bad Sector Header",0
; D "TDFehler #27: Sektor-Kopf nicht lesbar",0
err_txt10 dc.b "TDError #28: Disk write protected",0
; D "TDFehler #29: Diskette ist schreibgeschützt",0
err_txt11 dc.b "TDError #29: No Disk in drive",0
; D "TDFehler #29: Keine Diskette im Laufwerk",0
err_txt12 dc.b "TDError #30: Seek error",0
; D "TDFehler #30: Lesekopf-Position falsch",0
err_txt13 dc.b "TDError #31: Not enough memory",0
; D "TDFehler #31: Zuwenig Speicher",0
err_txt14 dc.b "TDError #32: Bad unit number",0
; D "TDFehler #32: Laufwerk nicht angschlossen",0
err_txt15 dc.b "TDError #33: Bad drive type",0
; D "TDFehler #33: Falsches Laufwerk",0
err_txt16 dc.b "TDError #34: Drive is in use",0
; D "TDFehler #34: Laufwerk wird gerade benutzt",0
err_txt17 dc.b "TDError #35: Post Reset done",0
; D "TDFehler #35: Nach Reset kein Zugriff mehr",0
freq_title dc.b "Load BootBlock-File",0
; D "BootBlock-Datei laden",0
err1_gad dc.b "_Yoop",0
; D "_Klar",0
err1_text dc.b "Can`t lock selected file.",0
; D "Bekomme keinen Lock() auf Datei.",0
err2_text dc.b "Can`t open selected file.",0
; D "Kann gewählte Datei nicht öffnen.",0
err3_text dc.b "File is not a BootBlock.",0
; D "Datei ist kein BootBlock.",0
err4_text dc.b "Error while reading BootBlock-File.",0
; D "Fehler beim Lesen der BootBlock-Datei.",0
fmt_text dc.b "Enter the Scroll-Text !!",10
dc.b "[max 50 chars]",0
; D "Bitte Fließ-Text eingeben !!",10
; D "[max 50 Zeichen]",0
funny_msg1 dc.b 10,$9b,"1mxInstall v1.4"
dc.b $9b,"0m (c) 1994 by Jens Tröger. All rights reserved.",10,10
dc.b "ignoring all arguments... opening GUI... ",0
; D 10,$9b,"1mxInstall v1.4",$9b,"0m (c) 1994 by Jens Tröger. Alle Rechte vorbehalten.",10,10
; D "ignoriere alle Argumente... öffne GUI... ",0
funny_msg2 dc.b "hard work done.",10,"Quitting away now - bye !",10,10,0
; D "harte Arbeit getan.",10,"Verkrümle mich jetzt - tschüß !",10,10,0
gadget6txt dc.b "_Read",0
; D "_Lesen",0
gadget7txt dc.b "_Load",0
; D "L_aden",0
gadget8txt dc.b "_Show",0
; D "_Zeige",0
gadget9txt dc.b "_About",0
; D "_Über",0
bb1_text dc.b "Empty",0
; D "Leer",0
bb2_text dc.b "Standard",0
; D "Standard",0
bb3_text dc.b "Message",0
; D "Botschaft",0
bb4_text dc.b "Scroller",0
; D "Fließtext",0
bb5_text dc.b "MemCheck",0
; D "SysTest",0
bb6_text dc.b "[Buffer]",0
; D "[Puffer]",0
show_text dc.b "Bootblock: ",10
dc.b "FileSys: ",10
dc.b "CheckSum: ",10,0
; D "Bootblock: ",10
; D "FileSys: ",10
; D "CheckSumme: ",10,0
show_gads dc.b " _Install | _Cancel ",0
; D " _Installieren | _Abbruch ",0
about_text dc.b "xInstall v1.4",10
dc.b "(c) 1994 by Jens Tröger",10,10
dc.b "This is Freeware.",10,10
dc.b "Greets to:",10
dc.b "PackMAN",10
dc.b "Jan van den Baard",10
dc.b "Oliver Reiff",10
dc.b "Holger Gzella",10,10
dc.b "xInstall`s Layout created",10
dc.b "with GadToolsBox.",0
; D "xInstall v1.4",10
; D "(c) 1994 by Jens Tröger",10,10
; D "Das Programm ist Freeware.",10,10
; D "Grüße an:",10
; D "PackMAN",10
; D "Jan van den Baard",10
; D "Oliver Reiff",10
; D "Holger Gzella",10,10
; D "xInstall`s Oberfläche erstellt",10
; D "mit GadToolsBox.",0
LOCALE_END
end